package com.hsh.erp.comparator;

import com.hsh.erp.domain.dto.ProductDTO;
import com.hsh.erp.utils.DataUtils;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 商品排序规则
 */
public class ProductComparator {
    public static int compare(ProductDTO o1, ProductDTO o2) {
        BigDecimal warnBoxNum1 = o1.getWarnBoxNum();
        BigDecimal warnBoxNum2 = o2.getWarnBoxNum();

        BigDecimal boxNum1 = o1.getBoxNum();
        BigDecimal boxNum2 = o2.getBoxNum();

        if (DataUtils.isBlankOrZero(warnBoxNum1) && DataUtils.isNotBlankOrZero(boxNum1)) {
            //预警库存=0时，库存数量！=0时，将其置为极小的小数，排在预警库存，库存数量均！=0 的前面
            warnBoxNum1 = new BigDecimal("0.000001");
        }else if (DataUtils.isBlankOrZero(warnBoxNum1) && DataUtils.isBlankOrZero(boxNum1)){
            //预警库存，库存数量均=0时，排在最后面
            warnBoxNum1 = new BigDecimal("0.000001");
            boxNum1 = new BigDecimal("1000000");
        }
        if (DataUtils.isBlankOrZero(warnBoxNum2) && DataUtils.isNotBlankOrZero(boxNum2)) {
            warnBoxNum2 = new BigDecimal("0.000001");
        }else if (DataUtils.isBlankOrZero(warnBoxNum2) && DataUtils.isBlankOrZero(boxNum2)){
            warnBoxNum2 = new BigDecimal("0.000001");
            boxNum2 = new BigDecimal("1000000");
        }
        //预计可销售时间，单位（/月）
        BigDecimal sellMonth1 = boxNum1.divide(warnBoxNum1, 10, RoundingMode.HALF_UP);
        BigDecimal sellMonth2 = boxNum2.divide(warnBoxNum2, 10, RoundingMode.HALF_UP);
        //预计可销售时间不相等时，按预计可销售时间从小到大排序
        if (sellMonth1.compareTo(sellMonth2) != 0) {
            return sellMonth1.compareTo(sellMonth2);
        }
        //预计可销售时间相等时，按预警库存从大到小排序
        return warnBoxNum2.compareTo(warnBoxNum1);
    }


}
